home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #142 (1991-10)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #142 (1991-10)(Rhein-Sieg-Soft).adf
/
LinienP
/
Linien.asm
< prev
next >
Wrap
Assembly Source File
|
1991-09-30
|
10KB
|
235 lines
; *************************
; * Linien V1.0 *
; * Geschrieben im Jahre *
; * 1991 von N. Tausch *
; * Public Domain (FD) *
; *************************
ExecBase: equ 4
OldOpenLibrary: equ -408
CloseLibrary: equ -414
FindTask: equ -294
WaitPort: equ -384
Forbid: equ -132
Permit: equ -138
GetMsg: equ -372
ReplyMsg: equ -378
OpenWindow: equ -204
CloseWindow: equ -72
Move: equ -240
Draw: equ -246
RectFill: equ -306
SetAPen: equ -342
Delay: equ -198
pr_CLI: equ 172
ThisTask: equ 276
IDCMP: equ 512
Flags: equ 70670
movea.l ExecBase,a6 ; Testen ob von CLI o.
movea.l ThisTask(a6),a0 ; Workbench gestartet
moveq #0,d0 ; wurde!
tst.l pr_CLI(a0)
bne.s CLI ; Gestartet von CLI
lea 92(a0),a0 ; Ansonsten WorkBenchMessage
jsr WaitPort(a6) ; holen und sichern
jsr GetMsg(a6)
move.l d0,WBenchMsg
CLI: lea IntName,a1 ; intuition.library öffnen
jsr OldOpenLibrary(a6)
move.l d0,IntBase
beq.w Ende ; Falls Fehler dann Programmende
lea GfxName,a1 ; graphics.library öffnen
jsr OldOpenLibrary(a6)
move.l d0,GfxBase
beq.w Intschliessen ; Falls Fehler dann intuition schliessen
; und Programmende
lea DosName,a1 ; dos.library öffnen
jsr OldOpenLibrary(a6) ; (für Delay-Funktion!)
move.l d0,DosBase ; Falls Fehler dann graphics u. intuition
beq.w Gfxschliessen ; schliessen u. Programmende
movea.l IntBase,a6 ; Öffne das Fenster
lea NewWindow,a0
jsr OpenWindow(a6)
move.l d0,WindowHandle ; Falls Fehler dann intuition,graphics
beq.w Dosschliessen ; u. dos.library schliessen u. Ende
movea.l WindowHandle,a0
move.l 50(a0),RastPort ; RastPort holen
Schleife:
jsr CLW ; Lösche Fensterinhalt
lea Tabelle,a0 ; Tabellenanfang nach a0
Schleife2:
cmp.l #0,(a0) ; Schon Ende erreicht?
beq.s Schleife ; Ja? Dann von vorne
cmp.l #50000,(a0) ; Soll der Fensterinhalt gelöscht
beq.w CLS ; werden? Ja? Dann tue es!
cmp.l #60000,(a0) ; Soll ein wenig gewartet werden?
beq.s Warte ; Ja? Dann tue es!
movea.l GfxBase,a6 ; Startpunkt einer Linie aus der
movea.l RastPort,a1 ; Tabelle holen und setzen
move.l (a0)+,d0
move.l (a0)+,d1
jsr Move(a6)
movea.l RastPort,a1 ; Endpunkt einer Linie aus der
move.l (a0)+,d0 ; Tabelle holen und Linie zeichnen
move.l (a0)+,d1
move.l a0,a5
jsr Draw(a6)
movea.l WindowHandle,a0 ; Wurde das Schließsymbol betätigt?
movea.l 86(a0),a0
movea.l ExecBase,a6
jsr GetMsg(a6)
tst.l d0 ; Wenn ja dann Fensterschliessen,
bne.w Windowzu ; Libraries schliessen und Ende
movea.l DosBase,a6 ; Ansonsten warte ein wenig
move.l #2,d1
jsr Delay(a6)
move.l a5,a0
bra Schleife2 ; und zur nächsten Linie
Warte: movea.l a0,a5 ; Unterprogramm wartet eine
movea.l DosBase,a6 ; Sekunde lang
move.l #50,d1
jsr Delay(a6)
movea.l a5,a0
move.l (a0)+,d0
bra Schleife2
CLS: jsr CLW ; Unterprogramm löscht den
move.l (a0)+,d0 ; Fensterinhalt
bra Schleife2
CLW: movea.l a0,a5 ; Fensterlöschroutine
movea.l GfxBase,a6 ; Setzt Vordergrundfarbe
move.l #0,d0 ; gleich der Hintergrundfarbe
movea.l RastPort,a1
jsr SetAPen(a6)
movea.l RastPort,a1
move.l #2,d0
move.l #10,d1
move.l #197,d2
move.l #108,d3
jsr RectFill(a6) ; Und füllt den Fensterinhalt mit
move.l #1,d0 ; einem Rechteck
movea.l RastPort,a1
jsr SetAPen(a6) ; Farbe wieder auf normal setzen
movea.l a5,a0
rts
Windowzu:
movea.l IntBase,a6 ; Fenster schliessen
movea.l WindowHandle,a0
jsr CloseWindow(a6)
Dosschliessen: ; dos.library schliessen
movea.l ExecBase,a6
movea.l DosBase,a1
jsr CloseLibrary(a6)
Gfxschliessen: ; graphics.library schliessen
movea.l ExecBase,a6
movea.l GfxBase,a1
jsr CloseLibrary(a6)
Intschliessen: ; intuition.library schliessen
movea.l ExecBase,a6
movea.l IntBase,a1
jsr CloseLibrary(a6)
Ende: movea.l ExecBase,a6 ; Wenn von der WorkBench
move.l WBenchMsg,d0 ; aus gestartet wurde
beq.s Ende2 ; dann die WorkBenchMessage wieder
jsr Forbid(a6) ; zurückgeben
movea.l d0,a1
jsr ReplyMsg(a6)
jsr Permit(a6)
Ende2: moveq #0,d0 ; Ansonsten ohne Nachrichten-
rts ; austausch Programm beenden
; ************** Daten ***************
WBenchMsg: dc.l 0
WindowHandle: dc.l 0
RastPort: dc.l 0
DosName: dc.b 'dos.library',0
DosBase: dc.l 0
IntName: dc.b 'intuition.library',0
IntBase: dc.l 0
GfxName: dc.b 'graphics.library',0
GfxBase: dc.l 0
NewWindow:
dc.w 209,57,204,113 ; x,y,Breite,Höhe
dc.b 3,1 ; Vordergrund-,Hintergrundfarbe
dc.l IDCMP ; IDCMP-Flags
dc.l Flags ; System-Flags
dc.l 0,0 ; Zeiger auf Gadget und MenüHackenImage
dc.l TitelText ; Zeiger auf Titeltext
dc.l 0,0 ; Zeiger auf Screen und eigene Bitmap
dc.w 204,113,204,113 ; minx,miny,maxx,maxy
dc.w 1 ; 1 für Workbenchscreen
TitelText: dc.b 'Linien',0 ; Fenstertitel
even
Tabelle: ; Tabelle
dc.l 50000,100,10,100,90,20,50,180,50
dc.l 100,10,90,50,100,15,80,50 ; 60000 bedeutet warten
dc.l 100,25,60,50,100,30,50,50 ; 50000 bedeutet Fenster löschen
dc.l 100,35,40,50,100,40,30,50,100,45
dc.l 20,50,100,10,110,50,100,15,120,50
dc.l 100,20,130,50,100,25,140,50,100,30
dc.l 150,50,100,35,160,50,100,40,170,50
dc.l 100,45,180,50,100,90,90,50,100,85
dc.l 80,50,100,80,70,50,100,75,60,50
dc.l 100,70,50,50,100,65,40,50,100,60
dc.l 30,50,100,55,20,50,100,90,110,50
dc.l 100,85,120,50,100,80,130,50,100,75
dc.l 140,50,100,70,150,50,100,65,160,50
dc.l 100,60,170,50,100,55,180,50,60000
dc.l 50000,20,10,180,10,180,10,180,90
dc.l 20,10,20,90,180,90,20,90,20,15,100,10
dc.l 20,20,90,10,20,25,80,10,20,30
dc.l 70,10,20,35,60,10,20,40,50,10,20
dc.l 45,40,10,30,10,20,50,20,50,30,90
dc.l 20,55,40,90,20,60,50,90,20,65,60
dc.l 90,20,70,70,90,20,75,80,90,20,80
dc.l 90,90,20,85,100,90,100,90,180,85
dc.l 110,90,180,80,120,90,180,75,130
dc.l 90,180,70,140,90,180,65,150,90
dc.l 180,60,160,90,180,55,170,90,180
dc.l 50,180,50,170,10,180,45,160,10,180
dc.l 40,150,10,180,35,140,10,180,30,130
dc.l 10,180,25,120,10,180,20,110,10,180
dc.l 15,100,10,60000
dc.l 50000,100,10,100,60,60,10,110,60
dc.l 20,10,120,60,20,30,120,55,20,50,120
dc.l 50,20,70,120,45,20,90,120,40,60,90
dc.l 110,40,100,90,100,50,140,90,100,50
dc.l 180,90,100,50,180,70,100,50,180,50
dc.l 100,50,180,30,100,50,180,10,100,50
dc.l 140,10,100,50,60000
dc.l 120,40,80,40,80,40,80,60,80,60,120
dc.l 60,120,60,120,40,60,30,60,70,60,70
dc.l 140,70,140,70,140,30,140,30,60,30,40
dc.l 80,160,80,160,80,160,20,160,20,40,20
dc.l 40,20,40,80,180,90,180,10,180,10,20
dc.l 10,20,10,20,90,20,90,180,90,60000
dc.l 20,50,100,10,20,30,60,10,20,50,100,90
dc.l 20,70,60,90,100,90,180,50,140,90,180
dc.l 70,180,50,100,10,180,30,140,10,60000
dc.l 100,20,40,50,40,50,100,80,100,80,160
dc.l 50,160,50,100,20,100,30,60,50,60,50
dc.l 100,70,100,70,140,50,140,50,100,30,60000
dc.l 0 ; 0 = Ende der Tabelle
end